<?php
// ConEntrega.php
/**
 * Model de ConEntrega
 * @filesource  14/01/2012
 * @author      Estrada Virtual <http://estradavirtual.com.br>
 * @copyright   Copyright <2012> Estrada Virtual
 * @package     <<application>>
 * @subpackage  <<application>>.application.models
 * @version     $Id$
 */
class Model_ConEntrega extends Ev_Db_Table
{
    protected $_name = 'con_entrega';
    protected $_dependentTables  = array( 'Model_ConEntrega', 'Model_ConEntregaTarefaTipo' );
    protected $_primary = array('id_entrega');

    protected $_referenceMap = array(
                    'ConEntrega' => array(
                            'columns'       => 'fk_entrega_pai',
                            'refTableClass' => 'Model_ConEntrega',
                            'refColumns'    => 'id_entrega',
                         ),
                    'ConProposta' => array(
                            'columns'       => 'fk_proposta',
                            'refTableClass' => 'Model_ConProposta',
                            'refColumns'    => 'id_proposta',
                         ));

     /**
     * Gravação de dados na tabela
     * @param $aDados array
     * @return id
     */
    public function gravar(array $aDados)
    {
        $aDados['qt_dias']  = 0;
        $aDados['qt_horas'] = 0;
        $aDados['nr_valor'] = 0;
        $id = parent::gravar($aDados);

        if (!empty($aDados['aTiposRelacionado'])) {
            $modelEntregaTarefaTipo = new Model_ConEntregaTarefaTipo();
            $modelEntregaTarefaTipo->delete(array('fk_entrega = ?' => $id));
            foreach ($aDados['aTiposRelacionado'] as $fk_tarefa_tipo) {
                $modelEntregaTarefaTipo->insert(array('fk_entrega' => $id, 'fk_tarefa_tipo' => $fk_tarefa_tipo));
            }
        }
        $this->calcularValores($id);
        return $id;
    }

    public function calcularValores($id)
    {
        $row = $this->find($id)->current();
        $rowSetTiposTarefa = $row->findModel_TarefaTipoViaModel_ConEntregaTarefaTipo();

        $qt_dias = $qt_horas = $nr_valor = 0;
        foreach ($rowSetTiposTarefa as $rowTipo) {
            $qt_dias  += $rowTipo->qt_dias;
            $qt_horas += $rowTipo->qt_horas_media;
            $nr_valor += $rowTipo->nr_valor;
        }
        $row->qt_dias  = $qt_dias;
        $row->qt_horas = $qt_horas;
        $row->nr_valor = $nr_valor;
        $row->save();

        $modelProposta = new Model_ConProposta();
        $modelProposta->calcularValores($row->fk_proposta);
    }

    public function getTree(Zend_Db_Table_Rowset $rowSet, $nivelInicio = 0, $nivelFim = 3)
    {
        if ($nivelInicio >= $nivelFim) {
            return array();
        }

        $tree = array();
        foreach ($rowSet as $row) {
            $registro = (object) $row->toArray();
            $filhos = array();
            $rowSetFilhos = $this->fetchAll(array('fk_entrega_pai = ?' => $row->id_entrega), 'st_codigo');
            $filhos = array();
            if ($rowSetFilhos) {
                $filhos = $this->getTree($rowSetFilhos, ++$nivelInicio, $nivelFim);
            }
            $registro->filhos = $filhos;
            $tree[] = $registro;
        }
        return $tree;
    }
}
